// pages/cuesDetail/index.ts

import { fontSizeCalc, handleCode, handleErrCode } from "../../utils/util";
import { getCuesTopicDetails, getShareAccountPage, resetShareAccount } from "../../service/api/api-cues-topic";
import { getCuesSubmitPage } from "../../service/api/api-cues-submit";

let shareUserIds = new Set(),// 选中的用户id
  shareUserNames = new Set();// 选中的用户名字

Page({

  /**
   * 页面的初始数据
   */
  data: {
    planId: 0,// 计划id
    plan: {
      run: 1
    },// 计划详情
    access: {} as any,// 当前用户权限
    currentUser: {},// 当前用户信息
    options: '',
    isAdmin: false,// 是否是管理员查看详情
    imgUrl: [],// 图片Url
    subPlanListObj: {},// 子任务的提交的上报列表，key为id
    galleryShow: false,// 是否显示图片预览
    shareAccounts: [],// 当前可指派的用户列表
    userDrawerVisible: false,// 右侧抽屉是否显示
    showReportInfo: false,// 是否显示上报信息
    showAssignInfo: false,// 是否显示指派信息
    showChangeShareBtn: false,// 是否显示修改指派信息

    iconSize: fontSizeCalc(40),
    tabFontSize: fontSizeCalc(28),
    labelSize: fontSizeCalc(32),
    inputSize: fontSizeCalc(32),
    tagSize: fontSizeCalc(26) + 'rpx',

    btnWidth: fontSizeCalc(320) + 'rpx',
    btnHeight: fontSizeCalc(60) + 'rpx',
    btnLineHeight: fontSizeCalc(36) + 'rpx',

    searchLock: false,// 请求锁

    currentCollapse: 1,// 收缩显示
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    const planId = options.id || 0;
    const { globalData: { access, currentUser } } = getApp();
    this.setData({
      access,
      planId,
      isAdmin: access.线索上报x选题计划x配置x管理员,
      showReportInfo: access.线索上报x选题计划x配置x管理员 || access.线索上报x选题计划x配置x需求者,
      currentUser,
      options: JSON.stringify(options)
    })
    this.getPlanDetail(planId);
  },

  /**
   * 处理一下管理员进入时的计划状态
   * @param data
   */
  handleAdminPlanType({ run }) {
    return {
      typeName: run === 1 ? '进行中' : '已结束',
      bgColor: run === 1 ? '#389E0D' : '#E75D58',
    }
  },

  /**
   * 通过id获取计划详情
   * @param id
   */
  async getPlanDetail(id) {
    let _that = this;
    const { searchLock, isAdmin } = _that.data;
    if (searchLock) {
      return
    }
    _that.setData({
      searchLock: true
    })
    wx.showLoading({
      title: '查询中...'
    })
    // 执行搜索函数
    await getCuesTopicDetails({ id }).then(async (response) => {
      const newPlan = response.data || {};
      const { typeName, bgColor } = this.handleAdminPlanType(newPlan);
      newPlan.bgColor = bgColor;
      newPlan.typeName = typeName;
      if (!newPlan.plans || !Array.isArray(newPlan.plans)) {// 做一个容错处理
        newPlan.plans = []
      }
      if (!newPlan.shareAccounts || !Array.isArray(newPlan.shareAccounts)) {// 做一个容错处理
        newPlan.shareAccounts = []
      }
      if (!newPlan.assignOrganizations || !Array.isArray(newPlan.assignOrganizations)) {// 做一个容错处理
        newPlan.assignOrganizations = []
      }
      newPlan.plans.forEach(item => {
        item.parentRun = newPlan.run
        item.title = {
          text: item.name,
          size: 30,
          color: '#1890FF',
        };
        item.tag = {
          text: '',
          size: 24,
          color: '#E75D58',
        }
      })
      // 指派单位
      newPlan.organizationsNames = newPlan.assignOrganizations.map(item => {
        return item && item.name
      })
      // 指派记者名字列表
      newPlan.shareNames = newPlan.shareAccounts.map(item => {
        return item && item.name
      })
      // 指派记者id列表
      newPlan.shareIds = newPlan.shareAccounts.map(item => {
        return item && item.id
      })

      shareUserIds = new Set(newPlan.shareIds);// id
      shareUserNames = new Set(newPlan.shareNames);// 名字
      // // 轮询去获取提交子任务列表
      // newPlan.plans.forEach(item =>{
      //     _that.getSubReportList(item.id)
      // })
      _that.setData({
        plan: newPlan,
        showAssignInfo: isAdmin || newPlan.isCreateAccount,// 是否显示指派信息，管理员与创建者
        showChangeShareBtn: isAdmin || newPlan.isCreateAccount,// 是否显示修改指派信息，管理员与创建者
      })
      _that.getShareAccountFun();
    }).catch(error => {
      console.warn(error)
      handleErrCode(error)
    }).finally(() => {
      wx.hideLoading();
      _that.setData({
        searchLock: false
      })
    })
  },
  //搜索记者列表
  clearSearchUser() {
    const shareAccounts = this.data.shareAccounts.map(item => {
      item.show = true;
      return item;
    })
    this.setData({
      shareAccounts: shareAccounts
    })
  },
  onClickInputUser(e) {
    let reg = /[\u4e00-\u9fa5]+/g;
    let searchName = e.detail.value;
    if (e.detail.value !== '') {
      searchName = e.detail.value.trim()
    }
    if (searchName.match(reg) == null) { // 输入框的值为空时，显示全部数据
      const shareAccounts = this.data.shareAccounts.map(item => {
        item.show = true;
        return item;
      })
      this.setData({
        shareAccounts: shareAccounts
      })
    } else {
      const shareAccounts = this.data.shareAccounts.map(item => {
        let text = item.text ? item.text : ''
        if (text.includes(searchName)) {
          item.show = true
          return item;
        } else {
          item.show = false
          return item;
        }
      })
      this.setData({
        shareAccounts: shareAccounts
      })
    }
  },
  onClickSearchUser(e) {
    let reg = /[\u4e00-\u9fa5]+/g;
    let searchName = e.detail.value;
    if (e.detail.value !== '') {
      searchName = e.detail.value.trim()
      console.log(searchName);
    }
    if (searchName.match(reg) == null) { // 输入框的值为空时，显示全部数据
      const shareAccounts = this.data.shareAccounts.map(item => {
        item.show = true;
        return item;
      })
      this.setData({
        shareAccounts: shareAccounts
      })
    } else {
      const shareAccounts = this.data.shareAccounts.map(item => {
        let text = item.text ? item.text : ''
        if (text.includes(searchName)) {
          item.show = true
          return item;
        } else {
          item.show = false
          return item;
        }
      })
      this.setData({
        shareAccounts: shareAccounts
      })
    }
    console.log(this.data.shareAccounts);
  },
  //指派记者
  onClickCheck(e, value) {
    const name = e.currentTarget.dataset.name
    const detail = e.detail;
    if (detail.checked) {// 选中了，就都加进去
      shareUserIds.add(detail.value);
      shareUserNames.add(name);
    } else {// 没选中，找一下删掉
      shareUserIds.delete(detail.value)
      shareUserNames.delete(name)
    }
    this.setData({
      showUserList: Array.from(shareUserNames).toString()
    })
  },
  /**
   * 通过id获取子任务列表
   * @param id
   */
  async getSubReportList(id) {
    let _that = this;
    // 执行搜索函数
    await getCuesSubmitPage({ id }).then(async (response) => {
      const list = response.data?.data || [];
      let obj = _that.data.subPlanListObj;
      obj[id] = list;
      _that.setData({
        subPlanListObj: obj
      })
    })
  },

  /**
   * 获取可选用户列表
   */
  async getShareAccountFun() {
    let _that = this;
    // 执行搜索函数
    await getShareAccountPage({
      current: 1,
      pageSize: 1000
    }).then(async (res) => {
      if (res?.data) {
        _that.setData({
          shareAccounts: _that.readyTreeData(
            Array.isArray(res.data?.data) ? res.data?.data : [], true
          )
        })
      }
    })
  },

  /**
   * 更新指派用户列表
   */
  async resetShareAccountFun() {
    let _that = this;
    const { planId: id } = _that.data;

    await resetShareAccount({
      id,
      accountIds: Array.from(shareUserIds)
    }).then(async (res) => {
      if (res?.code === 0) {
        ``
        handleCode(res, '修改成功');
        setTimeout(() => {
          _that.closeUserDrawer();
          _that.getPlanDetail(id)
        }, 1000)
      } else {
        handleErrCode()
      }
    }).catch(e => {
      handleErrCode(e)
    })
  },

  /**
   * 预备Tree结构数据
   * @param data
   * @param showUnit 是否显示单位
   */
  readyTreeData(data, showUnit?: Boolean): any {
    let treeData = [];
    if (Array.isArray(data) && data) {
      data.forEach((val) => {
        treeData.push({
          text: (showUnit ? val.organizationName + ' - ' : '') + val.name,
          value: val.id,
          item: val,
          children: this.readyTreeData(val.children, showUnit),
          collapsed: false,// 默认展开
          show: true,
          checked: shareUserIds.has(val.id),// 默认选中
          // icon: val.isFolder === 0 ? 1 : 0,
        });
      });
    }
    return treeData;
  },


  /**
   * 用户树节点 修改
   */
  userTreeNodeChange(res: { detail: any; }) {
    const detail = res?.detail;
    if (detail.checked) {// 选中了，就都加进去
      shareUserIds.add(detail.value);
      shareUserNames.add(detail.text);
    } else {// 没选中，找一下删掉
      shareUserIds.delete(detail.value)
      shareUserNames.delete(detail.text)
    }
    this.setData({
      showUserList: Array.from(shareUserNames).toString()
    })
  },

  /**
   * 显示侧面抽屉
   */
  showUserDrawer() {
    this.setData({
      userDrawerVisible: true
    })
  },

  /**
   * 关闭抽屉
   */
  closeUserDrawer() {
    this.setData({
      userDrawerVisible: false,
    })
  },

  /**
   *
   */
  subPlanClick(e: any) {
    const subPlan = e.currentTarget.dataset.item || {};
    wx.navigateTo({
      url: `/pages/planListAdmin/index?isAdmin=${this.data.isAdmin}&&id=${this.data.planId}&&planId=${subPlan.id}&&name=${subPlan.name}&&describes=${subPlan.describes}&&run=${subPlan.parentRun}`
    })
  },

  /**
   * 改变collapse
   * @param e
   */
  changeCollapse(e: any) {
    const curTag = e.currentTarget.dataset.item || '';
    this.setData({
      [curTag]: this.data[curTag] === 0 ? 1 : 0
    })
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    this.getPlanDetail(this.data.planId);
    wx.hideShareMenu({
      menus: ['shareAppMessage', 'shareTimeline'],// 隐藏分享到朋友和分享到朋友圈
    })
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  taskExecuteShareFun() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {
  }
})